package pers.youqu.item.dto;


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import pers.youqu.common.dto.BaseDTO;
import pers.youqu.common.entity.BaseEntity;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;


@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class CategoryDTO extends BaseDTO {
    private Long id;
    private String name;
    private Long parentId;
    private Boolean isParent;
    private Integer sort;

    public CategoryDTO(BaseEntity entity) {
        super(entity);
    }

    /**
     * 将PO集合转为DTO集合
     *
     * @param list PO对象的集合
     * @param <T>  PO的类型
     * @return DTO集合
     */
    public static <T extends BaseEntity> List<CategoryDTO> convertEntityList(Collection<T> list) {
        if (list == null) {
            return Collections.emptyList();
        }
        /*
            1. list.stream()：将集合转换成流List<Category>
            2. .map()：会出现隐式传参，传入的就是被遍历的每个元素对象category
            CategoryDTO::new  ==>  public CategoryDTO(BaseEntity entity)  ==>  CategoryDTO(category)  ==>  categoryDTO：将Category转成DTO对象
            3. .collect(Collectors.toList());将流转成集合

            ::的使用：
                person -> person.getAge();  可以替换成  Person::getAge
                x -> System.out.println(x)  可以替换成  System.out::println
                x -> new ArrayList<>(x);  可以替换为  ArrayList::new
        */
        return list.stream().map(CategoryDTO::new).collect(Collectors.toList());
    }
}